Unity用 WebSocket ClientのWebuSocketっての作った


概要

いろいろC#でのソケット周りの技術の知識増えたので、改修しつつ。

まだ過去のテストが動かないのがアレだが。


WebuSocket

https://github.com/sassembla/WebuSocket


モチベーションとか

・WebSocket Clientだけの独立した実装っていうのがなかった。みんなServerと抱き合わせ

・Thread、Taskとか使わないでも非同期通信を軽量に実装できるよねっていうのができそう

・約ゼロコピー行けないっすかねっていう目測ができた

・connection per instance ていうの作ったら取り回しが楽なのでは?という実験

ろくなWebSocket Clientがなかった


約ゼロコピーは「とりあえずユーザーランドに行くまで一回もコピーしないよ」っていうあたりを指してる。

msgpackとかで頑張ってるのとは次元の違う、単なる詭弁。


最終的に軽量に実装できたと思う。



特にUnityで使う際の注意

OnMessageハンドラとかは、Unityから見たら別スレッドで飛んでくるデータになる。

で、MainThreadでそのデータを使いたい場合、

・lockしてキューに入れる

・Updateとかでlockしてキューから取り出す

とかが必要。


もうちょっと変形させて、

・毎フレーム、もしメッセージが来ていたら特定のメソッドをメインスレッドで着火する

とかの場合、UniRxとか使って、特定のメソッドがメインスレッドで発火するように設定する必要がある。